package com.adun.scheduler;

/**
 * @author ZDF
 * @date 2025/8/8
 */
public interface ISchedulerJob<T> {

    /**
     * 获取任务名称,如果设置jobName,注册任务时将使用jobName,否则使用beanName
     *
     * @return
     */
    String getJobName();

    /**
     * 获取任务beanName
     *
     * @return
     */
    String getJobBeanName();

    /**
     * 获取任务描述
     *
     * @return
     */
    String getJobDescription();

    /**
     * 获取任务cron
     *
     * @return
     */
    String getJobCron();

    /**
     * 设置任务cron
     * @param jobCron
     */
    default void setJobCron(String jobCron){

    }

    /**
     * 获取任务类类型
     *
     * @return
     */
    Class<T> getJobClassType();


    /**
     * 初始化任务参数
     */
    void initJobParams();

    /**
     * 获取定时任务线程池核心线程数
     *
     * @return
     */
    default Integer getScheduledThreadPoolCoreSize() {
        return 3;
    }

    /**
     * 获取定时任务线程池线程前缀
     *
     * @return
     */
    default String getScheduledThreadPrefix() {
        return "loc-";
    }

    /**
     * init handler, invoked when JobThread init
     * 可选
     */
    default String init() {
        return null;
    }

    /**
     * destroy handler, invoked when JobThread destroy
     * 可选
     */
    default String destroy() {
        return null;
    }

    /**
     * 执行任务
     */
    void execute();
}
